草庐IT

Java XPathFactory 线程安全

全部标签

c# - ConcurrentDictionary 对象 - 通过不同的线程读写

我想在我的应用程序中使用ConcurrentDictionary,但首先我需要确保我正确理解它的工作原理。在我的应用程序中,我将有一个或多个线程写入字典或从字典中删除。而且,我会有一个或多个线程从字典中读取。可能同时发生。我是否正确认为ConcurrentDictionary的实现会处理所有必需的锁定,而我不需要提供自己的锁定?换句话说,如果一个线程正在对字典进行写入或删除操作,那么读取线程(或另一个写入线程)将被阻塞,直到更新或删除完成为止?非常感谢。 最佳答案 当前的实现混合使用了strip锁(我昨天在https://stack

c# - HttpClient.SendAsync 使用线程池而不是异步 IO?

所以我一直在深入研究HttpClient.SendAsync的实现通过反射器。我有意想知道这些方法的执行流程,并确定调用哪个API来执行异步IO工作。探索里面的各个类之后HttpClient,我看到它在内部使用HttpClientHandler源自HttpMessageHandler并实现其SendAsync方法。这是HttpClientHandler.SendAsync的实现:protectedinternaloverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){if(r

c# - 为什么运行一百个异步任务比运行一百个线程花费的时间更长?

为什么运行一百个异步任务比运行一百个线程花费的时间更长?我有以下测试类:publicclassAsyncTests{publicvoidTestMethod1(){vartasks=newList();for(vari=0;i();for(vari=0;iLongRunningOperationAsync(){varsw=Stopwatch.StartNew();awaitTask.Delay(500);Debug.WriteLine("Completedat{0},took{1}ms",DateTime.Now,sw.Elapsed.TotalMilliseconds);return

c# - Entity Framework 的行级安全性

我一直在考虑如何使用EntityFramework实现行级安全性。这个想法是让数据库不可知,这将提供方法来限制来自ObjectContext的行。我最初的一些想法涉及修改由EDMGEN工具创建的部分类,这提供了一些有限的支持。用户仍然可以通过使用他们自己的eSQL语句和QueryObject来绕过这个解决方案。我一直在寻找一个全面的解决方案,该解决方案将存在于数据库提供商之上,以便它保持不可知。 最佳答案 当然可以。重要的是阻止对对象上下文的直接访问(防止用户构建自己的ObjectQuery),而是为客户端提供一个更窄的网关,在该网

c# - 在四核上使用线程可将代码速度提高 65%?

这个样本code在四核处理器上比较串行方法和线程方法。该代码仅使用GetPixel()从4个图像中读取所有像素。我发现速度提高了大约65%,为什么它不等于75%,因为我有4个内核并且所有内核都已被充分利用?附言:你能检查代码吗,因为我没有做任何I/O,并且没有其他进程在机器上运行(正常的Windows进程) 最佳答案 它可以是任何数量的东西。想到的一对夫妇管理不同线程的开销。其他进程正在同时使用系统中的资源。 关于c#-在四核上使用线程可将代码速度提高65%?,我们在StackOverf

c# - 什么是 C# 线程类型?

在三种线程类型(内核级、用户级和混合)之间,C#(或更普遍的.NET)使用哪种类型? 最佳答案 内核线程(1:1)术语“内核线程”可用于指代完全在内核空间中运行的实际线程,也可指代由内核调度的用户空间线程。术语“内核支持”线程指的是后者,即在用户空间中运行但由内核促进的线程,这通常意味着内核调度它们。内核线程享有特权,可以访问用户模式线程禁止访问的内容。看看维基百科上的“Ring(ComputerSecurity)”。在Windows上,用户模式对应于Ring3,而内核模式对应于Ring0。用户级线程(N:1)“用户级线程”通常是指

c# - 从任何线程捕获未处理的异常

编辑这个问题的答案有帮助谢谢我很感激你的帮助:)但我最终使用了:http://code.msdn.microsoft.com/windowsdesktop/Handling-Unhandled-47492d0b#content原始问题:我想在我的应用程序崩溃时显示一条错误消息。目前我有:App.xaml:App.xaml的代码隐藏:namespaceWpfApplication5{publicpartialclassApp:Application{privatevoidApp_DispatcherUnhandledException(objectsender,DispatcherUnh

c# - 线程和 lambda 表达式

下面两段代码有什么区别?使用第二个会有任何问题吗?场景1:privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem(newWaitCallback(Log),e);}privatevoidLog(objectobj){Exceptione=(Exception)obj;Logger.Log(e);}场景2privatevoidLog(Exceptione){ThreadPool.QueueUserWorkItem((obj)=>{Logger.Log(e);});}在场景2中,我没有将异常作为参数传递给ThreadPool。异常对象

C# 将小数安全地转换为 int

我正在尝试安全地将小数转换为整数。有点像publicstaticboolDecimal.TryConvertToInt32(decimalval,outintval)如果无法转换为整数,则返回false,如果可以,则返回true并成功输出。这是为了避免在decimal.ToInt32方法中捕获OverflowException。最简单的方法是什么? 最佳答案 这里:publicstaticboolTryConvertToInt32(decimalval,outintintval){if(val>int.MaxValue||val

c# - 如何让任务异常传播回 UI 线程?

在TPL中,如果Task抛出异常,该异常被捕获并存储在Task.Exception中,然后遵循observedexceptions上的所有规则.如果它从未被观察到,它最终会在终结器线程上重新抛出并使进程崩溃。有没有办法阻止Task捕获该异常,而只是让它传播?我感兴趣的任务已经在UI线程上运行(由TaskScheduler.FromCurrentSynchronizationContext提供),我希望异常转义以便它可以由我现有的Application.ThreadException处理处理程序。我基本上希望Task中未处理的异常表现得像按钮单击处理程序中的未处理异常:立即在UI线程上传